题解 AT3530@洛谷 | 3530@Atcoder 【Write and Erase】

刚刚看了下面的题解,貌似有桶排的有set的,那么我就要用map了!(连map都没人用吗?)

头文件

#include <iostream>
#include <map>
using namespace std;

准备阶段——输入

map<int, bool> have;
int n;
cin>>n;
int k;
for(int i=0;i<n;i++) 
{
	cin>>k;
    //剩下的下一阶段介绍
}

have是一个以int类型为索引存储bool类型的map。
根据题意可以写出输入部分:输入询问个数n,再输入n个询问内容k。

判断出现与否

for(int i=0;i<n;i++) 
{
	cin>>k;
	if(have[k]) have.erase(k);//$
	else have[k] = true;//%
}

其中$行表示,如果k出现过,就把它从have中删除;
%行表示,否则将它加入have中。

统计次数

cout<<have.size()<<endl;

调用STL的统计大小的函数即可。

综合以上,得

#include <iostream>
#include <map>
using namespace std;

map<int, bool> have;

int main()
{
	int n;
	cin>>n;
	int k;
	for(int i=0;i<n;i++) 
	{
		cin>>k;
		if(have[k]) have.erase(k);
		else have[k] = true;
	}
	cout<<have.size()<<endl;
	return 0;
}